package main.gfs;

import java.io.File;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

import model.gfs.Ticket;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.text.Html;
import android.text.Html.ImageGetter;
import android.text.util.Linkify;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * Это специализированный класс адаптера для вывода кастомизированного списка
 * 
 * @author Cobalt
 * @since 20120129
 */
public class GFSListAdapter extends ArrayAdapter<Ticket> {

	private final ArrayList<Ticket> list;
	private final Activity context;
	private ImageGetter imageGetter;

	public GFSListAdapter(Activity cont, ArrayList<Ticket> list) {
		super(cont, R.layout.list_item, list);
		this.context = cont;
		this.list = list;
		
		// эта фишка вызывается при парсенге хтмл и нужна для
		// кэширования и отображения картинок
		imageGetter = new ImageGetter() {
			public Drawable getDrawable(String source) {
				Drawable drawable;

				Log.i("img", context.getCacheDir() + "/img" + source + ".jpg");

				File img_file = new File(context.getCacheDir() + "/img"
						+ source + ".jpg");
				if (!img_file.exists())
					Loader.getImage(context, "ajax", source);

				drawable = Drawable.createFromPath(context.getCacheDir()
						+ "/img" + source + ".jpg");
				drawable.setBounds(0, 0, 300, 300);
				return drawable;
			}
		};
	}

	/**
	 * Один элемент списка
	 * 
	 * @author Cobalt
	 * 
	 */
	static class ViewHolder {
		public TextView titleView; // заголовок тикета
		public TextView textView; // текст тикета
		public TextView textUser; // имя юзера
		public TextView textDate; // дата тикета
		public ImageView imgAvatar; // аватарко
	}

	/**
	 * Вызывается автоматом и отрисовывает кастомный итем в списке
	 */
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		View view = null;
		if (convertView == null) {
			// если итем только только создается
			LayoutInflater inflator = context.getLayoutInflater();
			view = inflator.inflate(R.layout.list_item, null);

			final ViewHolder viewHolder = new ViewHolder();
			viewHolder.titleView = (TextView) view.findViewById(R.id.titleView);
			viewHolder.textView = (TextView) view.findViewById(R.id.textView);
			viewHolder.textUser = (TextView) view.findViewById(R.id.textUser);
			viewHolder.textDate = (TextView) view.findViewById(R.id.textDate);
			viewHolder.imgAvatar = (ImageView) view
					.findViewById(R.id.imgAvatar);
			view.setTag(viewHolder);
		} else {
			// если итем уже создан
			view = convertView;
		}
		// заполняем значения текстовых вьюшек
		ViewHolder holder = (ViewHolder) view.getTag();
		holder.titleView.setText(list.get(position).getTitle());
		holder.textView.setText(Html.fromHtml(list.get(position).getTxt(),
				imageGetter, null));
		Linkify.addLinks(holder.textView,Linkify.WEB_URLS);
		holder.textUser.setText(list.get(position).getUserName());

		// заполняем дату
		Format formatter = new SimpleDateFormat("dd.MM.yy HH:mm");
		holder.textDate.setText(formatter.format(list.get(position).getDate()));

		// если у юзера нет авы, значит ставим дефолтовую
		String avname = "";
		if (list.get(position).IsAvatar) {
			avname = list.get(position).getUid() + "";
		} else {
			avname = "no";
		}

		// загрузим картинку из файла
		try {
			Bitmap bmImg = Loader.getImage(context, "avatars", avname);
			if (bmImg == null) {
				Log.e("img", "ошибка кэширования");
			}
			holder.imgAvatar.setImageBitmap(bmImg);
		} catch (Exception e) {
			Log.e("img", e.getMessage());
		}
		return view;
	}

}
